home *** CD-ROM | disk | FTP | other *** search
- package sun.tools.tree;
-
- import sun.tools.asm.Assembler;
- import sun.tools.java.AmbiguousField;
- import sun.tools.java.ClassDeclaration;
- import sun.tools.java.ClassDefinition;
- import sun.tools.java.ClassNotFound;
- import sun.tools.java.CompilerError;
- import sun.tools.java.Constants;
- import sun.tools.java.Environment;
- import sun.tools.java.FieldDefinition;
- import sun.tools.java.Type;
-
- public class AddExpression extends BinaryArithmeticExpression {
- public AddExpression(int var1, Expression var2, Expression var3) {
- super(29, var1, var2, var3);
- }
-
- void selectType(Environment var1, Context var2, int var3) {
- if (super.left.type == Type.tString && !super.right.type.isType(11)) {
- super.type = Type.tString;
- } else if (super.right.type == Type.tString && !super.left.type.isType(11)) {
- super.type = Type.tString;
- } else {
- super.selectType(var1, var2, var3);
- }
- }
-
- Expression eval(int var1, int var2) {
- return new IntExpression(super.where, var1 + var2);
- }
-
- Expression eval(long var1, long var3) {
- return new LongExpression(super.where, var1 + var3);
- }
-
- Expression eval(float var1, float var2) {
- return new FloatExpression(super.where, var1 + var2);
- }
-
- Expression eval(double var1, double var3) {
- return new DoubleExpression(super.where, var1 + var3);
- }
-
- Expression eval(String var1, String var2) {
- return new StringExpression(super.where, var1 + var2);
- }
-
- Expression simplify() {
- if (!super.type.isType(10)) {
- if (super.type.inMask(62)) {
- if (super.left.equals(0)) {
- return super.right;
- }
-
- if (super.right.equals(0)) {
- return super.left;
- }
- }
- } else if (super.right.type.isType(8)) {
- super.right = new StringExpression(super.right.where, "null");
- } else if (super.left.type.isType(8)) {
- super.left = new StringExpression(super.right.where, "null");
- }
-
- return this;
- }
-
- public int costInline(int var1) {
- return (super.type.isType(10) ? 12 : 1) + super.left.costInline(var1) + super.right.costInline(var1);
- }
-
- void codeOperation(Environment var1, Context var2, Assembler var3) {
- var3.add(super.where, 96 + super.type.getTypeCodeOffset());
- }
-
- void codeAppend(Environment var1, Context var2, Assembler var3, ClassDeclaration var4) {
- if (super.type.isType(10)) {
- super.left.codeAppend(var1, var2, var3, var4);
- super.right.codeAppend(var1, var2, var3, var4);
- } else {
- super.codeAppend(var1, var2, var3, var4);
- }
- }
-
- public void codeValue(Environment var1, Context var2, Assembler var3) {
- if (super.type.isType(10)) {
- ClassDeclaration var4 = var1.getClassDeclaration(Constants.idJavaLangStringBuffer);
- var3.add(super.where, 187, var4);
- var3.add(super.where, 89);
-
- try {
- ClassDefinition var5 = var2.field.getClassDefinition();
- FieldDefinition var6 = var4.getClassDefinition(var1).matchMethod(var1, var5, Constants.idInit);
- var3.add(super.where, 183, var6);
- this.codeAppend(var1, var2, var3, var4);
- var6 = var4.getClassDefinition(var1).matchMethod(var1, var5, Constants.idToString);
- var3.add(super.where, 182, var6);
- } catch (ClassNotFound var7) {
- throw new CompilerError(var7);
- } catch (AmbiguousField var8) {
- throw new CompilerError(var8);
- }
- } else {
- super.codeValue(var1, var2, var3);
- }
- }
- }
-